<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 同步 和异步
        // 同步是依次执行 , 异步是不按顺序执行

        // console.log(2321);
        // setTimeout(()=>{
        //     console.log(2133);
        // })
        // console.log(312321);

        // 2321
        // 312321
        // 2133



        // 要求异步执行后执行的步骤
        function syncFn(cb){
            setTimeout(()=>{
                console.log(1213);
                cb();
            },1000)
        }
        // 利用回调函数
        syncFn(function(){
            console.log('异步执行后的代码');
        })




        // 多个回调

        function fn(cb){
            setTimeout(()=>{
                console.log(1213);
                cb();
            },1000)
        }
        function fn1(cb){
            setTimeout(()=>{
                console.log(1213);
                cb();
            },1000)
        }
        function fn2(cb){
            setTimeout(()=>{
                console.log(1213);
                cb();
            },1000)
        }

        // 三个函数调用不能依次打印,只能用回调函数嵌套
        // fn();
        // fn1();
        // fn2();

        // 回调地狱;回调函数出现嵌套
        // 可读性差 , 可维护性差
        // 有bug 不好找
        // 解决回调地狱的方法: 观察者模式 , promise
         fn(function(){
            console.log('fn执行完了');
             fn1(function(){
                console.log('fn1执行完了');
                 fn2(function(){
                    console.log('fn2执行完了');
                })
            })
        })








    </script>
</body>
</html>